$OpenBSD: patch-arpd_c,v 1.4 2010/04/21 21:41:26 alek Exp $
--- arpd.c.orig	Sun Feb  9 05:20:40 2003
+++ arpd.c	Sat Apr 30 14:45:52 2005
@@ -22,10 +22,6 @@
 #include <syslog.h>
 #include <unistd.h>
 
-/* XXX - libevent */
-#undef timeout_pending
-#undef timeout_initialized
-
 #include <event.h>
 #include <dnet.h>
 #include "tree.h"
@@ -61,11 +57,12 @@ SPLAY_PROTOTYPE(tree, arp_req, next, compare);
 
 SPLAY_GENERATE(tree, arp_req, next, compare);
 
+static struct event		 arpd_sigint;
+static struct event		 arpd_sigterm;
 static pcap_t			*arpd_pcap;
 static arp_t			*arpd_arp;
 static eth_t			*arpd_eth;
 static struct intf_entry	 arpd_ifent;
-static int			 arpd_sig;
 
 static void
 usage(void)
@@ -265,7 +262,7 @@ arpd_send(eth_t *eth, int op,
 	    spa->addr_ip, tha->addr_eth, tpa->addr_ip);
 	
 	if (op == ARP_OP_REQUEST) {
-		syslog(LOG_DEBUG, __FUNCTION__ ": who-has %s tell %s",
+		syslog(LOG_DEBUG, "%s: who-has %s tell %s", __FUNCTION__,
 		    addr_ntoa(tpa), addr_ntoa(spa));
 	} else if (op == ARP_OP_REPLY) {
 		syslog(LOG_INFO, "arp reply %s is-at %s",
@@ -282,7 +278,7 @@ arpd_lookup(struct addr *addr)
 	int error;
 
 	if (addr_cmp(addr, &arpd_ifent.intf_addr) == 0) {
-		syslog(LOG_DEBUG, __FUNCTION__ ": %s at %s",
+		syslog(LOG_DEBUG, "%s: %s at %s", __FUNCTION__,
 		    addr_ntoa(addr), addr_ntoa(&arpd_ifent.intf_link_addr));
 		return (0);
 	}
@@ -291,10 +287,10 @@ arpd_lookup(struct addr *addr)
 	error = arp_get(arpd_arp, &arpent);
 	
 	if (error == -1) {
-		syslog(LOG_DEBUG, __FUNCTION__ ": no entry for %s",
+		syslog(LOG_DEBUG, "%s: no entry for %s", __FUNCTION__,
 		    addr_ntoa(addr));
 	} else {
-		syslog(LOG_DEBUG, __FUNCTION__ ": %s at %s",
+		syslog(LOG_DEBUG, "%s: %s at %s", __FUNCTION__,
 		    addr_ntoa(addr), addr_ntoa(&arpent.arp_ha));
 	}
 	return (error);
@@ -303,9 +299,9 @@ arpd_lookup(struct addr *addr)
 static void
 arpd_free(struct arp_req *req)
 {
-	timeout_del(&req->active);
-	timeout_del(&req->inactive);
-	timeout_del(&req->discover);
+	evtimer_del(&req->active);
+	evtimer_del(&req->inactive);
+	evtimer_del(&req->discover);
 	free(req);
 }
 
@@ -331,7 +327,7 @@ arpd_discover(struct arp_req *req, struc
 		arpd_send(arpd_eth, ARP_OP_REQUEST,
 		    &arpd_ifent.intf_link_addr,
 		    &arpd_ifent.intf_addr, &req->ha, &req->pa);
-		timeout_add(&req->discover, &tv);
+		evtimer_add(&req->discover, &tv);
 	}
 	req->cnt++;
 }
@@ -378,13 +374,13 @@ arpd_recv_cb(u_char *u, const struct pca
 			}
 			memcpy(&req->pa, &tmp.pa, sizeof(tmp.pa));
 
-			timeout_set(&req->active, arpd_timeout, req);
-			timeout_set(&req->inactive, arpd_timeout, req);
-			timeout_set(&req->discover, arpd_discovercb, req);
+			evtimer_set(&req->active, arpd_timeout, req);
+			evtimer_set(&req->inactive, arpd_timeout, req);
+			evtimer_set(&req->discover, arpd_discovercb, req);
 			
 			timerclear(&tv);
 			tv.tv_sec = ARPD_MAX_ACTIVE;
-			timeout_add(&req->active, &tv);
+			evtimer_add(&req->active, &tv);
 
 			SPLAY_INSERT(tree, &arpd_reqs, req);
 
@@ -396,7 +392,7 @@ arpd_recv_cb(u_char *u, const struct pca
 		} else {
 			timerclear(&tv);
 			tv.tv_sec = ARPD_MAX_INACTIVE;
-			timeout_add(&req->inactive, &tv);
+			evtimer_add(&req->inactive, &tv);
 			
 			if (req->negative) {
 				syslog(LOG_DEBUG, "%s: %s is allocated",
@@ -423,7 +419,7 @@ arpd_recv_cb(u_char *u, const struct pca
 		if ((req = SPLAY_FIND(tree, &arpd_reqs, &tmp)) != NULL) {
 			addr_pack(&src.arp_ha, ADDR_TYPE_ETH, ETH_ADDR_BITS,
 			    ethip->ar_sha, ETH_ADDR_LEN);
-			syslog(LOG_DEBUG, __FUNCTION__ ": %s at %s",
+			syslog(LOG_DEBUG, "%s: %s at %s", __FUNCTION__,
 			    addr_ntoa(&req->pa), addr_ntoa(&src.arp_ha));
 			
 			/* This address is claimed */
@@ -441,30 +438,18 @@ arpd_recv(int fd, short type, void *ev)
 	if (pcap_dispatch(arpd_pcap, -1, arpd_recv_cb, NULL) < 0)
 		syslog(LOG_ERR, "pcap_dispatch: %s", pcap_geterr(arpd_pcap));
 }
- 
+
 void
-terminate_handler(int sig)
+arpd_signal(int sig, short events, void *data)
 {
-	extern int event_gotsig;
-
-	event_gotsig = 1;
-	arpd_sig = sig;
-}
-
-int
-arpd_signal(void)
-{
-	syslog(LOG_INFO, "exiting on signal %d", arpd_sig);
+	syslog(LOG_INFO, "exiting on signal %d", sig);
 	arpd_exit(0);
-	/* NOTREACHED */
-	return (-1);
 }
 
 int
 main(int argc, char *argv[])
 {
 	struct event recv_ev;
-	extern int (*event_sigcb)(void);
 	char *dev;
 	int c, debug;
 	FILE *fp;
@@ -516,15 +501,10 @@ main(int argc, char *argv[])
 	event_add(&recv_ev, NULL);
 	
 	/* Setup signal handler */
-	if (signal(SIGINT, terminate_handler) == SIG_ERR) {
-		perror("signal");
-		return (-1);
-	}
-	if (signal(SIGTERM, terminate_handler) == SIG_ERR) {
-		perror("signal");
-		return (-1);
-	}
-	event_sigcb = arpd_signal;
+	signal_set(&arpd_sigint, SIGINT, arpd_signal, NULL);
+	signal_add(&arpd_sigint, NULL);
+	signal_set(&arpd_sigterm, SIGTERM, arpd_signal, NULL);
+	signal_add(&arpd_sigterm, NULL);
 	
 	event_dispatch();
 
